package com.easygem.common.utils;

import com.easygem.common.model.system.Dept;
import com.easygem.common.model.system.DeptClient;
import com.easygem.common.vo.system.DeptNodeVO;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 罗力
 * @version 1.0
 * @className DepUilts
 * @description TODO 部门工具类
 * @date 2024/12/26 19:23
 */
public class DepUtils {
    /**
     * 获取指定部门编号及其子部门编号集合
     *
     * @param dep 部门编号
     * @return 包含本部门及其所有子部门编号的集合
     */
    public static List<DeptClient> getDepartmentAndChildrenIds(List<DeptClient> deps, DeptClient dep) {
        List<DeptClient> result = new ArrayList<>();
        // 添加自身部门编号
        result.add(dep);
        // 遍历部门列表，查找所有子部门
        for (DeptClient department : deps) {
            if (dep.getDeptId().equals(department.getParentId())) {
                // 递归获取子部门及其子部门的编号
                result.addAll(getDepartmentAndChildrenIds(deps,department));
            }
        }
        return result;
    }

    /**
     * 获取指定部门编号及其子部门编号集合
     *
     * @param depId 部门编号
     * @return 包含本部门及其所有子部门编号的集合
     */
    public static List<Long> getDepartmentIdAndChildrenIds(List<DeptClient> deps, Long depId) {
        List<Long> result = new ArrayList<>();
        // 添加自身部门编号
        result.add(depId);
        // 遍历部门列表，查找所有子部门
        for (DeptClient department : deps) {
            if (depId.equals(department.getParentId())) {
                // 递归获取子部门及其子部门的编号
                result.addAll(getDepartmentIdAndChildrenIds(deps,department.getDeptId()));
            }
        }
        return result;
    }

    /**
     * 获取指定部门编号及其子部门编号集合
     *
     * @param dep 部门编号
     * @return 包含本部门及其所有子部门编号的集合
     */
    public static List<DeptNodeVO> getDepartmentVOAndChildren(List<DeptNodeVO> deps, DeptNodeVO dep) {
        List<DeptNodeVO> result = new ArrayList<>();
        // 添加自身部门编号
        result.add(dep);
        // 遍历部门列表，查找所有子部门
        for (DeptNodeVO department : deps) {
            if (dep.getDeptId().equals(department.getParentId())) {
                // 递归获取子部门及其子部门的编号
                result.addAll(getDepartmentVOAndChildren(deps,department));
            }
        }
        return result;
    }


    /**
     * 获取指定部门编号及其子部门编号集合
     *
     * @param dep 部门编号
     * @return 包含本部门及其所有子部门编号的集合
     */
    public static List<Dept> getDepartmentAndChildrenIds(List<Dept> deps, Dept dep) {
        List<Dept> result = new ArrayList<>();
        // 添加自身部门编号
        result.add(dep);
        // 遍历部门列表，查找所有子部门
        for (Dept department : deps) {
            if (dep.getDeptId().equals(department.getParentId())) {
                // 递归获取子部门及其子部门的编号
                result.addAll(getDepartmentAndChildrenIds(deps,department));
            }
        }
        return result;
    }

    /**
     * 获取指定部门编号及其子部门编号集合
     *
     * @param depId 部门编号
     * @return 包含本部门及其所有子部门编号的集合
     */
    public static List<Long> getDepartmentAndChildrenIds(List<Dept> deps, Long depId) {
        List<Long> result = new ArrayList<>();
        // 添加自身部门编号
        result.add(depId);
        // 遍历部门列表，查找所有子部门
        for (Dept department : deps) {
            if (depId.equals(department.getParentId())) {
                // 递归获取子部门及其子部门的编号
                result.addAll(getDepartmentAndChildrenIds(deps,department.getDeptId()));
            }
        }
        return result;
    }
}
